#include "lib.h"
#include "eurlbet.h"

EuropeanRouletteBet::EuropeanRouletteBet(uint8 wagerID, int32 amount)
	: RouletteBet(wagerID, amount)
{
	m_numNumbers = 0;

	if (wagerID >= 0 && wagerID <= 36)		// NOTE WELL:  *NO id 37*!!!
	{
		addNumber(wagerID);
	}
	else if (wagerID >=  38 && wagerID <=  49 ||
			 wagerID >= 161 && wagerID <= 163)
	{
		switch(wagerID)
		{
			case 38:
			case 161:
				addRange(1, 12, 1);
				break;
			case 39:
			case 162:
				addRange(13, 24, 1);
				break;
			case 40:
			case 163:
				addRange(25, 36, 1);
				break;
			case 41:
				addRange(1, 34, 3);
				break;
			case 42:
				addRange(2, 35, 3);
				break;
			case 43:
				addRange(3, 36, 3);
				break;
			case 44:
				addRange(1, 18, 1);
				break;
			case 45:
				addRange(2, 36, 2);
				break;
			case 46:
				addRange(1, 9, 2);
				addRange(12, 18, 2);
				addRange(19, 27, 2);
				addRange(30, 36, 2);
				break;
			case 47:
				addRange(2, 10, 2);
				addRange(11, 17, 2);
				addRange(20, 28, 2);
				addRange(29, 35, 2);
				break;
			case 48:
				addRange(1, 35, 2);
				break;
			case 49:
				addRange(19, 36, 1);
				break;
		}
	}
	else if (wagerID >= 50 && wagerID <= 111)
	{
		switch(wagerID)
		{
#if 0		// american bet only
			case 50:
				addNumber(0);
				addNumber(ID_00);
				break;
#endif
			case 51:
				addNumber(0);
				addNumber(1);
				break;
			case 52:
				addNumber(0);
				addNumber(2);
				break;
#if 0		// american bet only
			case 53:
				addNumber(ID_00);
				addNumber(2);
				break;
#endif
			case 54:
				addNumber(0);
				addNumber(3);
				break;
			case 55:
				addNumber(1);
				addNumber(2);
				break;
			case 56:
				addNumber(2);
				addNumber(3);
				break;
			case 57:
				addNumber(1);
				addNumber(4);
				break;
			case 58:
				addNumber(2);
				addNumber(5);
				break;
			case 59:
				addNumber(3);
				addNumber(6);
				break;
			case 60:
				addNumber(4);
				addNumber(5);
				break;
			case 61:
				addNumber(5);
				addNumber(6);
				break;
			case 62:
				addNumber(4);
				addNumber(7);
				break;
			case 63:
				addNumber(5);
				addNumber(8);
				break;
			case 64:
				addNumber(6);
				addNumber(9);
				break;
			case 65:
				addNumber(7);
				addNumber(8);
				break;
			case 66:
				addNumber(8);
				addNumber(9);
				break;
			case 67:
				addNumber(7);
				addNumber(10);
				break;
			case 68:
				addNumber(8);
				addNumber(11);
				break;
			case 69:
				addNumber(9);
				addNumber(12);
				break;
			case 70:
				addNumber(10);
				addNumber(11);
				break;
			case 71:
				addNumber(11);
				addNumber(12);
				break;
			case 72:
				addNumber(10);
				addNumber(13);
				break;
			case 73:
				addNumber(11);
				addNumber(14);
				break;
			case 74:
				addNumber(12);
				addNumber(15);
				break;
			case 75:
				addNumber(13);
				addNumber(14);
				break;
			case 76:
				addNumber(14);
				addNumber(15);
				break;
			case 77:
				addNumber(13);
				addNumber(16);
				break;
			case 78:
				addNumber(14);
				addNumber(17);
				break;
			case 79:
				addNumber(15);
				addNumber(18);
				break;
			case 80:
				addNumber(16);
				addNumber(17);
				break;
			case 81:
				addNumber(17);
				addNumber(18);
				break;
			case 82:
				addNumber(16);
				addNumber(19);
				break;
			case 83:
				addNumber(17);
				addNumber(20);
				break;
			case 84:
				addNumber(18);
				addNumber(21);
				break;
			case 85:
				addNumber(19);
				addNumber(20);
				break;
			case 86:
				addNumber(20);
				addNumber(21);
				break;
			case 87:
				addNumber(19);
				addNumber(22);
				break;
			case 88:
				addNumber(20);
				addNumber(23);
				break;
			case 89:
				addNumber(21);
				addNumber(24);
				break;
			case 90:
				addNumber(22);
				addNumber(23);
				break;
			case 91:
				addNumber(23);
				addNumber(24);
				break;
			case 92:
				addNumber(22);
				addNumber(25);
				break;
			case 93:
				addNumber(23);
				addNumber(26);
				break;
			case 94:
				addNumber(24);
				addNumber(27);
				break;
			case 95:
				addNumber(25);
				addNumber(26);
				break;
			case 96:
				addNumber(26);
				addNumber(27);
				break;
			case 97:
				addNumber(25);
				addNumber(28);
				break;
			case 98:
				addNumber(26);
				addNumber(29);
				break;
			case 99:
				addNumber(27);
				addNumber(30);
				break;
			case 100:
				addNumber(28);
				addNumber(29);
				break;
			case 101:
				addNumber(29);
				addNumber(30);
				break;
			case 102:
				addNumber(28);
				addNumber(31);
				break;
			case 103:
				addNumber(29);
				addNumber(32);
				break;
			case 104:
				addNumber(30);
				addNumber(33);
				break;
			case 105:
				addNumber(31);
				addNumber(32);
				break;
			case 106:
				addNumber(32);
				addNumber(33);
				break;
			case 107:
				addNumber(31);
				addNumber(34);
				break;
			case 108:
				addNumber(32);
				addNumber(35);
				break;
			case 109:
				addNumber(33);
				addNumber(36);
				break;
			case 110:
				addNumber(34);
				addNumber(35);
				break;
			case 111:
				addNumber(35);
				addNumber(36);
				break;
		}
	}
	else if (wagerID >= 112 && wagerID <= 126 ||
			 wagerID >= 164 && wagerID <= 175)
	{
		switch(wagerID)
		{
			case 112:
				addRange(0, 2, 1);
				break;
#if 0	// american bet only
			case 113:
				addNumber(0);
				addNumber(ID_00);
				addNumber(2);
				break;
#endif
			case 114:
				addNumber(0);
				addNumber(2);
				addNumber(3);
				break;
			case 115:
			case 164:
				addRange(1, 3, 1);
				break;
			case 116:
			case 165:
				addRange(4, 6, 1);
				break;
			case 117:
			case 166:
				addRange(7, 9, 1);
				break;
			case 118:
			case 167:
				addRange(10, 12, 1);
				break;
			case 119:
			case 168:
				addRange(13, 15, 1);
				break;
			case 120:
			case 169:
				addRange(16, 18, 1);
				break;
			case 121:
			case 170:
				addRange(19, 21, 1);
				break;
			case 122:
			case 171:
				addRange(22, 24, 1);
				break;
			case 123:
			case 172:
				addRange(25, 27, 1);
				break;
			case 124:
			case 173:
				addRange(28, 30, 1);
				break;
			case 125:
			case 174:
				addRange(31, 33, 1);
				break;
			case 126:
			case 175:
				addRange(34, 36, 1);
				break;
		}
	}
	else if (wagerID >= 127 && wagerID <= 148)
	{
		switch(wagerID)
		{
			case 127:
				addNumber(1);
				addNumber(2);
				addNumber(4);
				addNumber(5);
				break;
			case 128:
				addNumber(2);
				addNumber(3);
				addNumber(5);
				addNumber(6);
				break;
			case 129:
				addNumber(4);
				addNumber(5);
				addNumber(7);
				addNumber(8);
				break;
			case 130:
				addNumber(5);
				addNumber(6);
				addNumber(8);
				addNumber(9);
				break;
			case 131:
				addNumber(7);
				addNumber(8);
				addNumber(10);
				addNumber(11);
				break;
			case 132:
				addNumber(8);
				addNumber(9);
				addNumber(11);
				addNumber(12);
				break;
			case 133:
				addNumber(10);
				addNumber(11);
				addNumber(13);
				addNumber(14);
				break;
			case 134:
				addNumber(11);
				addNumber(12);
				addNumber(14);
				addNumber(15);
				break;
			case 135:
				addNumber(13);
				addNumber(14);
				addNumber(16);
				addNumber(17);
				break;
			case 136:
				addNumber(14);
				addNumber(15);
				addNumber(17);
				addNumber(18);
				break;
			case 137:
				addNumber(16);
				addNumber(17);
				addNumber(19);
				addNumber(20);
				break;
			case 138:
				addNumber(17);
				addNumber(18);
				addNumber(20);
				addNumber(21);
				break;
			case 139:
				addNumber(19);
				addNumber(20);
				addNumber(22);
				addNumber(23);
				break;
			case 140:
				addNumber(20);
				addNumber(21);
				addNumber(23);
				addNumber(24);
				break;
			case 141:
				addNumber(22);
				addNumber(23);
				addNumber(25);
				addNumber(26);
				break;
			case 142:
				addNumber(23);
				addNumber(24);
				addNumber(26);
				addNumber(27);
				break;
			case 143:
				addNumber(25);
				addNumber(26);
				addNumber(28);
				addNumber(29);
				break;
			case 144:
				addNumber(26);
				addNumber(27);
				addNumber(29);
				addNumber(30);
				break;
			case 145:
				addNumber(28);
				addNumber(29);
				addNumber(31);
				addNumber(32);
				break;
			case 146:
				addNumber(29);
				addNumber(30);
				addNumber(32);
				addNumber(33);
				break;
			case 147:
				addNumber(31);
				addNumber(32);
				addNumber(34);
				addNumber(35);
				break;
			case 148:
				addNumber(32);
				addNumber(33);
				addNumber(35);
				addNumber(36);
				break;
		}
	}
	else if (wagerID == 149 || wagerID == 176)
	{
		addRange(0, 3, 1);
	}
	else if (wagerID >= 150 && wagerID <= 160 ||
			 wagerID >= 177 && wagerID <= 187)
	{
		switch(wagerID)
		{
			case 150:
			case 177:
				addRange(1, 6, 1);
				break;
			case 151:
			case 178:
				addRange(4, 9, 1);
				break;
			case 152:
			case 179:
				addRange(7, 12, 1);
				break;
			case 153:
			case 180:
				addRange(10, 15, 1);
				break;
			case 154:
			case 181:
				addRange(13, 18, 1);
				break;
			case 155:
			case 182:
				addRange(16, 21, 1);
				break;
			case 156:
			case 183:
				addRange(19, 24, 1);
				break;
			case 157:
			case 184:
				addRange(22, 27, 1);
				break;
			case 158:
			case 185:
				addRange(25, 30, 1);
				break;
			case 159:
			case 186:
				addRange(28, 33, 1);
				break;
			case 160:
			case 187:
				addRange(31, 36, 1);
				break;
		}
	}
	else if (wagerID >= 188 && wagerID <= 224)
	{
		switch(wagerID)
		{
			case 188:		// 0 bet
				addNumber(3);
				addNumber(26);
				addNumber(0);
				addNumber(32);
				addNumber(15);
				break;
			case 189:		// 32 bet
				addNumber(26);
				addNumber(0);
				addNumber(32);
				addNumber(15);
				addNumber(19);
				break;
			case 190:		// 15 bet
				addNumber(0);
				addNumber(32);
				addNumber(15);
				addNumber(19);
				addNumber(4);
				break;
			case 191:		// 19 bet
				addNumber(32);
				addNumber(15);
				addNumber(19);
				addNumber(4);
				addNumber(21);
				break;
			case 192:		// 4 bet
				addNumber(15);
				addNumber(19);
				addNumber(4);
				addNumber(21);
				addNumber(2);
				break;
			case 193:		// 21 bet
				addNumber(19);
				addNumber(4);
				addNumber(21);
				addNumber(2);
				addNumber(25);
				break;
			case 194:		// 2 bet
				addNumber(4);
				addNumber(21);
				addNumber(2);
				addNumber(25);
				addNumber(17);
				break;
			case 195:		// 25 bet
				addNumber(21);
				addNumber(2);
				addNumber(25);
				addNumber(17);
				addNumber(34);
				break;
			case 196:		// 17 bet
				addNumber(2);
				addNumber(25);
				addNumber(17);
				addNumber(34);
				addNumber(6);
				break;
			case 197:		// 34 bet
				addNumber(25);
				addNumber(17);
				addNumber(34);
				addNumber(6);
				addNumber(27);
				break;
			case 198:		// 6 bet
				addNumber(17);
				addNumber(34);
				addNumber(6);
				addNumber(27);
				addNumber(13);
				break;
			case 199:		// 27 bet
				addNumber(34);
				addNumber(6);
				addNumber(27);
				addNumber(13);
				addNumber(36);
				break;
			case 200:		// 13 bet
				addNumber(6);
				addNumber(27);
				addNumber(13);
				addNumber(36);
				addNumber(11);
				break;
			case 201:		// 36 bet
				addNumber(27);
				addNumber(13);
				addNumber(36);
				addNumber(11);
				addNumber(30);
				break;
			case 202:		// 11 bet
				addNumber(13);
				addNumber(36);
				addNumber(11);
				addNumber(30);
				addNumber(8);
				break;
			case 203:		// 30 bet
				addNumber(36);
				addNumber(11);
				addNumber(30);
				addNumber(8);
				addNumber(23);
				break;
			case 204:		// 8 bet
				addNumber(11);
				addNumber(30);
				addNumber(8);
				addNumber(23);
				addNumber(10);
				break;
			case 205:		// 23 bet
				addNumber(30);
				addNumber(8);
				addNumber(23);
				addNumber(10);
				addNumber(5);
				break;
			case 206:		// 10 bet
				addNumber(8);
				addNumber(23);
				addNumber(10);
				addNumber(5);
				addNumber(24);
				break;
			case 207:		// 5 bet
				addNumber(23);
				addNumber(10);
				addNumber(5);
				addNumber(24);
				addNumber(16);
				break;
			case 208:		// 24 bet
				addNumber(10);
				addNumber(5);
				addNumber(24);
				addNumber(16);
				addNumber(33);
				break;
			case 209:		// 16 bet
				addNumber(5);
				addNumber(24);
				addNumber(16);
				addNumber(33);
				addNumber(1);
				break;
			case 210:		// 33 bet
				addNumber(24);
				addNumber(16);
				addNumber(33);
				addNumber(1);
				addNumber(20);
				break;
			case 211:		// 1 bet
				addNumber(16);
				addNumber(33);
				addNumber(1);
				addNumber(20);
				addNumber(14);
				break;
			case 212:		// 20 bet
				addNumber(33);
				addNumber(1);
				addNumber(20);
				addNumber(14);
				addNumber(31);
				break;
			case 213:		// 14 bet
				addNumber(1);
				addNumber(20);
				addNumber(14);
				addNumber(31);
				addNumber(9);
				break;
			case 214:		// 31 bet
				addNumber(20);
				addNumber(14);
				addNumber(31);
				addNumber(9);
				addNumber(22);
				break;
			case 215:		// 9 bet
				addNumber(14);
				addNumber(31);
				addNumber(9);
				addNumber(22);
				addNumber(18);
				break;
			case 216:		// 22 bet
				addNumber(31);
				addNumber(9);
				addNumber(22);
				addNumber(18);
				addNumber(29);
				break;
			case 217:		// 18 bet
				addNumber(9);
				addNumber(22);
				addNumber(18);
				addNumber(29);
				addNumber(7);
				break;
			case 218:		// 29 bet
				addNumber(22);
				addNumber(18);
				addNumber(29);
				addNumber(7);
				addNumber(28);
				break;
			case 219:		// 7 bet
				addNumber(18);
				addNumber(29);
				addNumber(7);
				addNumber(28);
				addNumber(12);
				break;
			case 220:		// 28 bet
				addNumber(29);
				addNumber(7);
				addNumber(28);
				addNumber(12);
				addNumber(35);
				break;
			case 221:		// 12 bet
				addNumber(7);
				addNumber(28);
				addNumber(12);
				addNumber(35);
				addNumber(3);
				break;
			case 222:		// 35 bet
				addNumber(28);
				addNumber(12);
				addNumber(35);
				addNumber(3);
				addNumber(26);
				break;
			case 223:		// 3 bet
				addNumber(12);
				addNumber(35);
				addNumber(3);
				addNumber(26);
				addNumber(0);
				break;
			case 224:		// 26 bet
				addNumber(35);
				addNumber(3);
				addNumber(26);
				addNumber(0);
				addNumber(32);
				break;
		}
		
		setMacroBet(true);
	}
	else if (wagerID >= 225 && wagerID <= 227)
	{	
		switch(wagerID)
		{
			case 225:			// Voisin Du Zero
				addNumber(114);	addNumber(114);		// 0/2/3
				addNumber(143); addNumber(143);		// 25/26/28/29	
				addNumber(62);						// 4/7
				addNumber(74);						// 12/15
				addNumber(84);						// 18/21
				addNumber(87);						// 19/22
				addNumber(108);						// 32/35
				break;

			case 226:			// Orphans
				addNumber(1);		// 1
				addNumber(64);		// 6/9
				addNumber(78);		// 14/17
				addNumber(83);		// 17/20
				addNumber(107);		// 31/34
				break;
			
			case 227:			// Tries Du Cylindre
				addNumber(63);		// 5/8
				addNumber(70);		// 10/11
				addNumber(77);		// 13/16
				addNumber(91);		// 23/24
				addNumber(99);		// 27/30
				addNumber(109);		// 33/36
				break;
		}

		setMacroBet(true);
	}

	setOdds();
}


bool8 
EuropeanRouletteBet::isInside()
{ 
	return (m_numNumbers < 12);
}


void 
EuropeanRouletteBet::setOdds()
{
	switch (m_numNumbers)
	{
		case 1:
			m_odds = 35;
			break;
		case 2:
			m_odds = 17;
			break;
		case 3:
			m_odds = 11;
			break;
		case 4:
			m_odds = 8;
			break;
#if 0	// american bet only
		case 5:
			m_odds = 6;
			break;
#endif
		case 6:
			m_odds = 5;
			break;
		case 12:
			m_odds = 2;
			break;
		case 18:
			m_odds = 1;
			break;
		default:
			m_odds = 0; // Shouldn't get here
			break;
	}

	if (isMacroBet())
		m_odds = 0;
}


int8
EuropeanRouletteBet::getOdds()
{
	return m_odds;
}



int8
EuropeanRouletteBet::getColor()
{
	switch (getBetID())
	{
		case 2:
		case 4:
		case 6:
		case 8:
		case 10:
		case 11:
		case 13:
		case 15:
		case 17:
		case 20:
		case 22:
		case 24:
		case 26:
		case 28:
		case 29:
		case 31:
		case 33:
		case 35:
			return Black;

		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
		case 12:
		case 14:
		case 16:
		case 18:
		case 19:
		case 21:
		case 23:
		case 25:
		case 27:
		case 30:
		case 32:
		case 34:
		case 36:
			return Red;

		default:
			return Green;
	}
}
